// utils/request.js
import axios from 'axios';

const baseURL = 'http://localhost:9090';

// 创建 axios 实例
export const request = axios.create({
    baseURL: baseURL, // 基础URL
    timeout: 10000, // 请求超时时间
    headers: {
        'Content-Type': 'application/json;charset=UTF-8'
    }
});

// 请求拦截器
request.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么
        // const token = localStorage.getItem('token');
        // if (token) {
        //     config.headers.Authorization = `Bearer ${token}`;
        // }
        config.headers['Content-Type'] = 'application/json;charset=UTF-8';
        return config;
    },
    error => {
        // 对请求错误做些什么
        return Promise.reject(error);
    }
);

// 响应拦截器
request.interceptors.response.use(
    response => {
        // 对响应数据做点什么
        let res = response.data;

        // 根据后端返回的数据结构进行调整
        if (res.code === '200' || res.success) {
            if (typeof res === "string") {
                res = res ? JSON.parse(res) : res
            }
            return res;
        } else {
            // 处理业务错误
            console.error('业务错误:', res.message || '未知错误');
            return Promise.reject(new Error(res.message || 'Error'));
        }
    },
    error => {
        // 对响应错误做点什么
        let message = '请求失败';

        if (error.response) {
            // 服务器返回了错误状态码
            switch (error.response.status) {
                case 400:
                    message = '请求错误';
                    break;
                case 401:
                    message = '未授权，请重新登录';
                    // 可以在这里跳转到登录页
                    break;
                case 403:
                    message = '拒绝访问';
                    break;
                case 404:
                    message = '请求地址出错';
                    break;
                case 500:
                    message = '服务器内部错误';
                    break;
                default:
                    message = '网络错误';
            }
        } else if (error.request) {
            // 请求发送了但没有收到响应
            message = '网络异常，请检查网络连接';
        } else {
            // 其他错误
            message = error.message;
        }

        console.error('请求错误:', message);
        return Promise.reject(new Error(message));
    }
);

export default request;